package org.codingq92.pritice.socket.group;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * 群聊功能server端
 *
 * 本类负责监听特定端口，接受客户端的连接请求，并维护所有在线的客户端Socket连接
 * 当有新的客户端连接时，将其添加到在线列表中，并启动一个新的线程处理该客户端的消息
 *
 * @author: CodingQ92
 * @date: 2025/6/22 21:54
 */
public class GroupChatServer {

    // 存储所有在线的Socket连接
    public static final List<Socket> onLineSocket = new ArrayList<>();

    /**
     * 主函数，用于启动服务器，监听客户端的连接
     *
     * @param args 命令行参数
     * @throws Exception 如果服务器Socket创建失败或被中断
     */
    public static void main(String[] args) throws Exception {
        // 创建ServerSocket，监听18000端口
        ServerSocket serverSocket = new ServerSocket(18000);
        // 无限循环等待客户端的连接
        while (true) {
            // 接受客户端的连接请求
            Socket accept = serverSocket.accept();
            // 将新的客户端Socket添加到在线列表中
            onLineSocket.add(accept);
            // 打印客户端的连接信息
            System.out.println(accept.getRemoteSocketAddress() + ">>>加入群聊!!!");
            // 启动一个新的线程处理客户端的消息
            new ServerAcceptThread(accept).start();
        }
    }
}
